//===================================================================
// 项目名 : Hbt.Cur
// 文件名 : HbtRoutineCollectionExtensions.cs
// 创建者 : Claude
// 创建时间: 2025-01-11
// 版本号 : V0.0.1
// 描述    : 常规业务服务集合扩展
//===================================================================


using Hbt.Application.Services.Routine.Advertisement;
using Hbt.Application.Services.Routine.Book;
using Hbt.Application.Services.Routine.DataDictionary;
using Hbt.Application.Services.Routine.Document;
using Hbt.Application.Services.Routine.Document.Regulations;
using Hbt.Application.Services.Routine.I18n;
using Hbt.Application.Services.Routine.Iso;
using Hbt.Application.Services.Routine.Numbering;
using Hbt.Application.Services.Routine.Settings;
using Hbt.Common.Options;

namespace Hbt.Infrastructure.Extensions
{
    /// <summary>
    /// 常规业务服务集合扩展
    /// </summary>
    /// <remarks>
    /// 此类用于集中管理和注册常规业务相关的所有服务，包括：
    /// 1. 核心服务 - 系统配置、字典、语言、翻译等
    /// 2. 任务服务 - 定时任务和日志
    /// 3. 邮件服务 - 邮件发送和模板
    /// 4. 文件服务 - 文件上传和管理
    /// 5. 通知服务 - 系统通知管理
    /// 6. 合同服务 - 合同管理
    /// 7. 会议服务 - 会议管理
    /// 8. 项目服务 - 项目管理
    /// 9. 日程服务 - 日程管理
    /// 10. 用车服务 - 用车管理
    /// 11. 新闻服务 - 新闻管理
    /// 12. 广告服务 - 广告管理
    /// </remarks>
    public static class HbtRoutineCollectionExtensions
    {
        /// <summary>
        /// 添加常规业务服务
        /// </summary>
        /// <remarks>
        /// 注册常规业务相关的所有服务，包括：
        /// 1. 核心服务 - 系统配置、字典、语言、翻译等
        /// 2. 任务服务 - 定时任务和日志
        /// 3. 邮件服务 - 邮件发送和模板
        /// 4. 文件服务 - 文件上传和管理
        /// 5. 通知服务 - 系统通知管理
        /// 6. 合同服务 - 合同管理
        /// 7. 会议服务 - 会议管理
        /// 8. 项目服务 - 项目管理
        /// 9. 日程服务 - 日程管理
        /// 10. 用车服务 - 用车管理
        /// 11. 新闻服务 - 新闻管理
        /// 12. 广告服务 - 广告管理
        /// </remarks>
        /// <param name="services">服务集合</param>
        /// <param name="configuration">配置</param>
        /// <returns>服务集合</returns>
        public static IServiceCollection AddRoutineServices(this IServiceCollection services, IConfiguration configuration)
        {
            // 核心服务
            services.AddScoped<IHbtGeneralSettingsService, HbtGeneralSettingsService>();              // 系统配置
            services.AddScoped<IHbtDictDataService, HbtDictDataService>();          // 字典数据服务
            services.AddScoped<IHbtDictTypeService, HbtDictTypeService>();          // 字典类型服务
            services.AddScoped<IHbtLanguageService, HbtLanguageService>();          // 语言服务
            services.AddScoped<IHbtTranslationService, HbtTranslationService>();    // 翻译服务
            services.AddScoped<IHbtNumberingRulesService, HbtNumberingRulesService>();      // 单号规则服务
            services.AddScoped<IHbtNumberGeneratorService, HbtNumberGeneratorService>(); // 单号生成服务

            // 任务相关服务
            services.AddScoped<IHbtQuartzService, HbtQuartzService>();              // 定时任务服务

            // 邮件相关服务
            services.AddScoped<IHbtMailService, HbtMailService>();                  // 邮件服务
            services.AddScoped<IHbtMailTplService, HbtMailTplService>();            // 邮件模板服务

            // 文件管理服务
            services.AddScoped<IHbtFileService, HbtFileService>();                  // 文件服务
            services.AddScoped<IHbtIsoDocumentService, HbtIsoDocumentService>();    // ISO文档服务
            services.AddScoped<IHbtIsoDocumentAccessService, HbtIsoDocumentAccessService>();        // ISO文档查阅服务
            services.AddScoped<IHbtIsoDocumentApprovalService, HbtIsoDocumentApprovalService>();    // ISO文档审批服务
            services.AddScoped<IHbtIsoDocumentDistributionService, HbtIsoDocumentDistributionService>(); // ISO文档分发服务
            services.AddScoped<IHbtIsoDocumentObsoleteService, HbtIsoDocumentObsoleteService>();    // ISO文档作废服务
            services.AddScoped<IHbtIsoDocumentRevisionService, HbtIsoDocumentRevisionService>();    // ISO文档修订服务
            services.AddScoped<IHbtIsoExternalFileService, HbtIsoExternalFileService>();            // ISO外来文件服务
            services.AddScoped<IHbtRegulationService, HbtRegulationService>();      // 法规服务
            services.AddScoped<IHbtLawService, HbtLawService>();                    // 法律文件服务
            services.AddScoped<IHbtOfficialDocumentService, HbtOfficialDocumentService>(); // 公文服务

            // 通知服务
            services.AddScoped<IHbtNoticeService, HbtNoticeService>();              // 通知服务

            // 合同管理服务
            services.AddScoped<IHbtContractService, HbtContractService>();          // 合同服务

            // 会议管理服务
            services.AddScoped<IHbtMeetingService, HbtMeetingService>();            // 会议服务

            // 项目管理服务
            services.AddScoped<IHbtProjectService, HbtProjectService>();            // 项目服务

            // 日程管理服务
            services.AddScoped<IHbtScheduleService, HbtScheduleService>();          // 日程服务
            services.AddScoped<IHbtTeamScheduleService, HbtTeamScheduleService>();  // 团队日程服务

            // 用车管理服务
            services.AddScoped<IHbtVehicleService, HbtVehicleService>();            // 用车服务

            // 新闻相关服务
            services.AddScoped<IHbtNewsService, HbtNewsService>();                  // 新闻服务
            services.AddScoped<IHbtNewsTopicService, HbtNewsTopicService>();        // 新闻话题服务
            services.AddScoped<IHbtNewsTopicRelationService, HbtNewsTopicRelationService>(); // 新闻话题关系服务
            services.AddScoped<IHbtNewsCommentService, HbtNewsCommentService>();     // 新闻评论服务
            services.AddScoped<IHbtNewsLikeService, HbtNewsLikeService>();          // 新闻点赞服务
            services.AddScoped<IHbtNewsTopicParticipantService, HbtNewsTopicParticipantService>(); // 新闻话题参与者服务

            // 图书管理服务
            services.AddScoped<IHbtBookService, HbtBookService>();                  // 图书服务

            // 广告管理服务
            services.AddScoped<IHbtAdvertService, HbtAdvertService>();              // 广告服务
            services.AddScoped<IHbtAdvertBillingService, HbtAdvertBillingService>(); // 广告计费服务

            // 配置选项注册
            services.Configure<HbtCommentOptions>(configuration.GetSection("Comment"));

            return services;
        }
    }
}
